package main

import (
	"fmt"
)

// 切片，即动态数组
/*
	切片中会存储的三个值：
		1.初始下标：即冒号前的值
		2.长度：冒号后的值 - 冒号前的值
		3.容量：数组初始长度 - 切片初始下标
	例如：
		切片为 arr[1:2]，初始下标=1，长度=2-1，容量=5-1
*/
func main() {
	// 格式一：将数组从头切到尾
	/*arr := [5]int{1, 2, 3, 4, 5}
	sec := arr[:]
	// 格式二：简写，省略数组长度即可
	sec1 := []int{1, 2, 3, 4, 5}
	fmt.Println(sec1)
	// 格式三：空引用
	var sec2 [5]int
	fmt.Println(sec2)*/
	//fmt.Println(reflect.TypeOf(arr))		// [5]int
	//fmt.Println(reflect.TypeOf(section))	// []int
	//fmt.Println(len(section), cap(section))	// 1 4

	// append()函数，可以模拟增删改查，注意：扩容后返回新的对象
	/*// 追加一/多个值到末尾，返回一个新切片
	section1 := append(sec, 1)
	fmt.Println(section1)
	section2 := append(sec, 1, 3, 9, 8)
	fmt.Println(section2)
	// 追加整个切片到末尾，使用省略号完成
	arr2 := []int{6, 7, 8}
	section3 := append(sec, arr2...)
	fmt.Println(section3)
	fmt.Println(sec)*/

	sec3 := []int{1, 2, 3}
	fmt.Printf("长度：%v, 容量：%v\n", len(sec3), cap(sec3))
	// 首位插入一个值
	sec3 = append([]int{0}, sec3...) // {0, 1, 2, 3}
	fmt.Printf("首位插入一个值: %v\n", sec3)

	// 中间位置删除一个值
	sec3 = append(sec3[:2], sec3[3:]...)
	fmt.Printf("中间位置删除一个值: %v\n", sec3)

}
